Scripting.defineScriptEvent("applicationsShowStart", "Starting to switch to applications view");
Scripting.defineScriptEvent("applicationsShowDone", "Done switching to applications view");
+ // Enable recording of timestamps for different points in the frame cycle
+ global.frame_timestamps = true;
+
Main.overview.connect('shown', function() {
Scripting.scriptEvent('overviewShowDone');
});
* can send this with a ust of 0. Simplify life for consumers
* by ignoring such events */
if (swap_complete_event->ust != 0)
- shell_perf_log_event_x (shell_perf_log_get_default (),
- "glx.swapComplete",
- swap_complete_event->ust);
+ {
+ gboolean frame_timestamps;
+ g_object_get (shell_plugin->global,
+ "frame-timestamps", &frame_timestamps,
+ NULL);
+
+ if (frame_timestamps)
+ shell_perf_log_event_x (shell_perf_log_get_default (),
+ "glx.swapComplete",
+ swap_complete_event->ust);
+ }
}
#endif
guint32 xdnd_timestamp;
gboolean has_modal;
+ gboolean frame_timestamps;
};
enum {
PROP_IMAGEDIR,
PROP_USERDATADIR,
PROP_FOCUS_MANAGER,
+ PROP_FRAME_TIMESTAMPS,
};
/* Signals */
g_clear_pointer (&global->session_mode, g_free);
global->session_mode = g_ascii_strdown (g_value_get_string (value), -1);
break;
+ case PROP_FRAME_TIMESTAMPS:
+ global->frame_timestamps = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_FOCUS_MANAGER:
g_value_set_object (value, global->focus_manager);
break;
+ case PROP_FRAME_TIMESTAMPS:
+ g_value_set_boolean (value, global->frame_timestamps);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
"The shell's StFocusManager",
ST_TYPE_FOCUS_MANAGER,
G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_FRAME_TIMESTAMPS,
+ g_param_spec_boolean ("frame-timestamps",
+ "Frame Timestamps",
+ "Whether to log frame timestamps in the performance log",
+ FALSE,
+ G_PARAM_READWRITE));
}
/*
static gboolean
global_stage_before_paint (gpointer data)
{
- shell_perf_log_event (shell_perf_log_get_default (),
- "clutter.stagePaintStart");
+ ShellGlobal *global = SHELL_GLOBAL (data);
+
+ if (global->frame_timestamps)
+ shell_perf_log_event (shell_perf_log_get_default (),
+ "clutter.stagePaintStart");
return TRUE;
}
static gboolean
global_stage_after_paint (gpointer data)
{
- shell_perf_log_event (shell_perf_log_get_default (),
- "clutter.stagePaintDone");
+ ShellGlobal *global = SHELL_GLOBAL (data);
+
+ if (global->frame_timestamps)
+ shell_perf_log_event (shell_perf_log_get_default (),
+ "clutter.stagePaintDone");
return TRUE;
}
clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_PRE_PAINT,
global_stage_before_paint,
- NULL, NULL);
+ global, NULL);
clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT,
global_stage_after_paint,
- NULL, NULL);
+ global, NULL);
shell_perf_log_define_event (shell_perf_log_get_default(),
"clutter.stagePaintStart",